package com.zhava.crawler.client.request;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Map;

/**
 * 分页式爬虫请求参数
 *
 * @author zhaxiang
 */
@Data
@Schema(description = "分页式爬虫请求参数")
public class PaginatedCrawlerRequest {

    /**
     * 需要爬取数据的URL
     */
    @Schema(description = "需要爬取数据的URL", required = true, example = "https://www.amazon.com/-/zh/product-reviews/B077P5BTCY/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber=1")
    private String sourceUrl;

    /**
     * 页码参数名
     */
    @Schema(description = "URL中表示页码的参数名", required = true, example = "pageNumber")
    private String pageParameterName;

    /**
     * 起始页码
     */
    @Schema(description = "起始页码", defaultValue = "1")
    private Integer startPage = 1;

    /**
     * 结束页码
     */
    @Schema(description = "结束页码（包含）", defaultValue = "3")
    private Integer endPage = 3;

    /**
     * 请求头信息，可以只提供认证相关的参数，如 Cookie 等
     * 如果不提供，将使用默认的请求头
     * 提供的参数会覆盖默认请求头中的对应参数
     */
    @Schema(description = "请求头信息，可以只提供认证相关的参数，会和默认请求头合并", example = "{\"Cookie\": \"sessionId=abc123\"}")
    private Map<String, String> headers;

    /**
     * 连接超时时间（毫秒），默认为5000
     */
    @Schema(description = "连接超时时间（毫秒）", defaultValue = "5000")
    private Integer connectTimeout = 5000;

    /**
     * 读取超时时间（毫秒），默认为30000
     */
    @Schema(description = "读取超时时间（毫秒）", defaultValue = "30000")
    private Integer readTimeout = 30000;

    /**
     * CSS选择器，用于精确提取内容
     */
    @Schema(description = "CSS选择器，用于精确提取内容", example = "div.review")
    private String cssSelector;

    /**
     * 数据输出格式，支持JSON、CSV等，默认为JSON
     */
    @Schema(description = "数据输出格式，支持JSON、CSV等", defaultValue = "JSON", allowableValues = {"JSON", "CSV", "RAW"})
    private String outputFormat = "JSON";
    
    /**
     * 是否输出文件
     * 0-否，1-是
     */
    @Schema(description = "是否输出文件，0-否，1-是", defaultValue = "0", allowableValues = {"0", "1"})
    private Integer exportFile = 0;
} 